from langchain.pydantic_v1 import BaseModel, Field
from langchain.tools import BaseTool, StructuredTool, tool


class AddCalculatorInput(BaseModel):
    a: str = Field(description="the first number")
    b: str = Field(description="the second number")


def add(a: str, b: str) -> int:
    """Add two numbers."""
    return len(a) + len(b)


add_calculator = StructuredTool.from_function(
    func=add,  # 工具具体逻辑
    name="add_Calculator",  # 工具名
    description="Add two numbers",  # 工具信息
    args_schema=AddCalculatorInput,  # 工具接受参数信息
    return_direct=True,  # 直接作为工具的输出返回给调用者
    handle_tool_error=True,  # 报错了继续执行，不会吧那些报错行抛出，也可以自定义函数处理，handle_tool_error=函数名
)

# print(add_calculator.invoke({"a": 3, "b": 2}))
# print(add_calculator.invoke({"a": 3, "b": 2}))
